package gui.standard.form;

import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import model.tablemodel.PrometniDokumentTableModel;
import net.miginfocom.swing.MigLayout;
import util.components.JDigitsTextField;
import util.components.JLimitedTextField;
import actions.standard.form.ProknjiziPrometniDokumentAction;
import actions.standard.form.StornirajPrometniDokumentAction;
import actions.standard.form.ZoomFormAction;

public class PrometniDokumentForm extends StandardForm{
	
	private static final long serialVersionUID = 1L;
	private JDigitsTextField tfPoslovnaGodina;
	private JLimitedTextField tfSifraPreduzeca;
	private JDigitsTextField tfBrojPrometnogDok;
	private JTextField tfDatumNastankaPrometnogDok;
	private JLimitedTextField tfSifraSektora;
	private JLimitedTextField tfSifraMagacina;
	private JLimitedTextField tfSifraPosPartnera;
	private JLimitedTextField tfMagSifraPreduzeca;
	private JLimitedTextField tfMagSifraSektora;
	private JLimitedTextField tfMagSifraMagacina;
	private JTextField tfDatumKnjizenja;
	private JLimitedTextField tfVrstaDokumenta;
	private JLimitedTextField tfStatus;
	
	private JButton bPoslovniPartnerZoom;
	private JButton bMagacin1Zoom;
	//private JButton bMagacin2Zoom;
	private JButton bPoslovnaGodinaZoom;
	private JButton btnProknjizi;
	private JButton btnStorniraj;

	public PrometniDokumentForm(){

	}
	
	@Override
	public void init(){
		
		super.init();
		
		tfPoslovnaGodina = new JDigitsTextField(4, 4, false, false);
		tfSifraPreduzeca = new JLimitedTextField(12, 12, true);
		tfBrojPrometnogDok = new JDigitsTextField(10, 10, true, true);
		tfDatumNastankaPrometnogDok = new JTextField(12);
		tfSifraSektora = new JLimitedTextField(12, 12, true);
		tfSifraMagacina = new JLimitedTextField(12, 12, true);
		tfSifraPosPartnera = new JLimitedTextField(12, 12, true);
		tfMagSifraPreduzeca = new JLimitedTextField(12, 12, true);
		tfMagSifraSektora = new JLimitedTextField(12, 12, true);
		tfMagSifraMagacina = new JLimitedTextField(12, 12, true);
		tfDatumKnjizenja = new JTextField(12);
		tfVrstaDokumenta = new JLimitedTextField(1, 1, true);
		tfStatus = new JLimitedTextField(1, 1, true);
		
		setTitle("Prometni dokument");
		
		tableModel = new PrometniDokumentTableModel(new String[] {"Poslovna godina",
				"Sifra preduzeca", "Broj prometnog dok.", "Datum nastanka prometnog dok.",
				"Sifra sektora", "Sifra Magacina", "Sifra poslovnog partnera", 
				"Mag. Sifra Preduzeca", "Mag.  sifra sektora", "Mag. sifra magacina", 
				"Datum knjizenja", "Vrsta dokumenta", "Status"}, 0);
		tblGrid.setModel(tableModel);
		
		bPoslovniPartnerZoom = new JButton(new ZoomFormAction(this, new PoslovniPartnerForm()));
		bMagacin1Zoom = new JButton(new ZoomFormAction(this, new MagacinForm()));
		//bMagacin2Zoom = new JButton(new ZoomFormAction(this, new MagacinForm()));
		bPoslovnaGodinaZoom = new JButton(new ZoomFormAction(this, new PoslovnaGodinaForm()));
		
		btnProknjizi = new JButton(new ProknjiziPrometniDokumentAction(this));
		btnStorniraj = new JButton(new StornirajPrometniDokumentAction(this));
		
		children.add(new StavkaPrometnogDokumentaForm());
		
		//dugmici za knjizenje i tako to
		buttonsPanel.add(btnProknjizi);
		buttonsPanel.add(btnStorniraj);
		

		JPanel bottomPanel = new JPanel();
		bottomPanel.setLayout(new MigLayout("fillx"));
		JPanel dataPanel = new JPanel();
		dataPanel.setLayout(new MigLayout("gapx 15px"));


		JLabel lblPoslovnaGodina = new JLabel ("Poslovna godina:");
		JLabel lblSifraPreduzeca = new JLabel("Sifra preduzeca:");
		JLabel lblBrojPrometnogDok = new JLabel ("Broj prometnog dok.:");
		JLabel lblDatumNastankaPrometnogDok = new JLabel("Datum nastanka prometnog dok.:");
		JLabel lblSifraSektora = new JLabel ("Sifra sektora:");
		JLabel lblSifraMagacina = new JLabel("Naziv magacina:");
		JLabel lblSifraPosPartnera = new JLabel ("Sifra poslovnog partnera:");
		JLabel lblMagSifraPreduzeca = new JLabel("Mag. sifra preduzeca:");
		JLabel lblMagSifraSektora = new JLabel ("Mag sifra sektora:");
		JLabel lblMagSifraMagacina = new JLabel("Mag sifra magacina:");
		JLabel lblDatumKnjizenja = new JLabel ("Datum knjizenja:");
		JLabel lblVrstaDokumenta = new JLabel("Vrsta dokumenta:");
		JLabel lblStatus = new JLabel ("Status:");

		dataPanel.add(lblPoslovnaGodina);
		dataPanel.add(tfPoslovnaGodina);
		dataPanel.add(bPoslovnaGodinaZoom, "wrap");
		dataPanel.add(lblSifraPreduzeca);
		dataPanel.add(tfSifraPreduzeca,"pushx");
		dataPanel.add(lblBrojPrometnogDok);
		dataPanel.add(tfBrojPrometnogDok,"wrap");
		dataPanel.add(lblDatumNastankaPrometnogDok);
		dataPanel.add(tfDatumNastankaPrometnogDok,"pushx");
		dataPanel.add(lblSifraSektora);
		dataPanel.add(tfSifraSektora);
		dataPanel.add(bMagacin1Zoom, "wrap");
		dataPanel.add(lblSifraMagacina);
		dataPanel.add(tfSifraMagacina,"pushx");
		dataPanel.add(lblSifraPosPartnera);
		dataPanel.add(tfSifraPosPartnera);
		dataPanel.add(bPoslovniPartnerZoom, "wrap");
		dataPanel.add(lblMagSifraPreduzeca);
		dataPanel.add(tfMagSifraPreduzeca,"pushx");
		dataPanel.add(lblMagSifraSektora);
		dataPanel.add(tfMagSifraSektora, "wrap");
		//dataPanel.add(bMagacin2Zoom, "wrap");
		dataPanel.add(lblMagSifraMagacina);
		dataPanel.add(tfMagSifraMagacina,"pushx");
		dataPanel.add(lblDatumKnjizenja);
		dataPanel.add(tfDatumKnjizenja,"wrap");
		dataPanel.add(lblVrstaDokumenta);
		dataPanel.add(tfVrstaDokumenta,"pushx");
		dataPanel.add(lblStatus);
		dataPanel.add(tfStatus,"wrap");
		bottomPanel.add(dataPanel);

		bottomPanel.add(buttonsPanel,"dock east");

		add(bottomPanel, "grow, wrap");
	}

	@Override
	public void sync() {
		// TODO Auto-generated method stub
		int index = tblGrid.getSelectedRow();
		if (index < 0) {
			tfPoslovnaGodina.setText("");
			tfSifraPreduzeca.setText("");
			tfBrojPrometnogDok.setText("");
			tfDatumNastankaPrometnogDok.setText("");
			tfSifraSektora.setText("");
			tfSifraMagacina.setText("");
			tfSifraPosPartnera.setText("");
			tfMagSifraPreduzeca.setText("");
			tfMagSifraSektora.setText("");
			tfMagSifraMagacina.setText("");
			tfDatumKnjizenja.setText("");
			tfVrstaDokumenta.setText("");
			tfStatus.setText("");
			return;
		}
		String poslovnaGodina = (String)tableModel.getValueAt(index, 0);
		String sifraPreduzeca = (String)tableModel.getValueAt(index, 1);
		String brojPrometnogDok = (String)tableModel.getValueAt(index, 2);
		String datumNastankaPrometnogDok = (String)tableModel.getValueAt(index, 3);
		String sifraSektora = (String)tableModel.getValueAt(index, 4);
		String sifraMagacina = (String)tableModel.getValueAt(index, 5);
		String sifraPosPartnera = (String)tableModel.getValueAt(index, 6);
		String magSifraPreduzeca = (String)tableModel.getValueAt(index, 7);
		String magSifraSektora = (String)tableModel.getValueAt(index, 8);
		String magSifraMagacina = (String)tableModel.getValueAt(index, 9);
		String datumKnjizenja = (String)tableModel.getValueAt(index, 10);
		String vrstaDokumenta = (String)tableModel.getValueAt(index, 11);
		String status = (String)tableModel.getValueAt(index, 12);

		tfPoslovnaGodina.setText(poslovnaGodina);
		tfSifraPreduzeca.setText(sifraPreduzeca);
		tfBrojPrometnogDok.setText(brojPrometnogDok);
		tfDatumNastankaPrometnogDok.setText(datumNastankaPrometnogDok);
		tfSifraSektora.setText(sifraSektora);
		tfSifraMagacina.setText(sifraMagacina);
		tfSifraPosPartnera.setText(sifraPosPartnera);
		tfMagSifraPreduzeca.setText(magSifraPreduzeca);
		tfMagSifraSektora.setText(magSifraSektora);
		tfMagSifraMagacina.setText(magSifraMagacina);
		tfDatumKnjizenja.setText(datumKnjizenja);
		tfVrstaDokumenta.setText(vrstaDokumenta);
		tfStatus.setText(status);
		
		setMode(StandardForm.MODE_EDIT);
		
	}

	@Override
	public void addRow() {
		// TODO Auto-generated method stub
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String brojPrometnogDok = tfBrojPrometnogDok.getText().trim();
		String datumNastankaPrometnogDok = tfDatumNastankaPrometnogDok.getText().trim();
		String sifraSektora = tfSifraSektora.getText().trim();
		String sifraMagacina = tfSifraMagacina.getText().trim();
		String sifraPosPartnera = tfSifraPosPartnera.getText().trim();
		String magSifraPreduzeca = tfMagSifraPreduzeca.getText().trim();
		String magSifraSektora = tfMagSifraSektora.getText().trim();
		String magSifraMagacina = tfMagSifraMagacina.getText().trim();
		String datumKnjizenja = tfDatumKnjizenja.getText().trim();
		String vrstaDokumenta = tfVrstaDokumenta.getText().trim();
		String status = tfStatus.getText().trim();
		try {
			int index = tableModel.insertRow(new String[]{poslovnaGodina, sifraPreduzeca, brojPrometnogDok, datumNastankaPrometnogDok, 
					sifraSektora, sifraMagacina, sifraPosPartnera, magSifraPreduzeca, magSifraSektora, magSifraMagacina, datumKnjizenja, 
					vrstaDokumenta, status});
			tblGrid.setRowSelectionInterval(index, index);
			setMode(MODE_ADD);
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(),"Greska", JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void searchRow() {
		// TODO Auto-generated method stub
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String brojPrometnogDok = tfBrojPrometnogDok.getText().trim();
		String datumNastankaPrometnogDok = tfDatumNastankaPrometnogDok.getText().trim();
		String sifraSektora = tfSifraSektora.getText().trim();
		String sifraMagacina = tfSifraMagacina.getText().trim();
		String sifraPosPartnera = tfSifraPosPartnera.getText().trim();
		String magSifraPreduzeca = tfMagSifraPreduzeca.getText().trim();
		String magSifraSektora = tfMagSifraSektora.getText().trim();
		String magSifraMagacina = tfMagSifraMagacina.getText().trim();
		String datumKnjizenja = tfDatumKnjizenja.getText().trim();
		String vrstaDokumenta = tfVrstaDokumenta.getText().trim();
		String status = tfStatus.getText().trim();
		try {
			tableModel.searchRows(new String[]{poslovnaGodina, sifraPreduzeca, brojPrometnogDok, datumNastankaPrometnogDok, 
					sifraSektora, sifraMagacina, sifraPosPartnera, magSifraPreduzeca, magSifraSektora, magSifraMagacina, datumKnjizenja, 
					vrstaDokumenta, status});
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(),"Greska", JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void editRow() {
		// TODO Auto-generated method stub
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String brojPrometnogDok = tfBrojPrometnogDok.getText().trim();
		String datumNastankaPrometnogDok = tfDatumNastankaPrometnogDok.getText().trim();
		String sifraSektora = tfSifraSektora.getText().trim();
		String sifraMagacina = tfSifraMagacina.getText().trim();
		String sifraPosPartnera = tfSifraPosPartnera.getText().trim();
		String magSifraPreduzeca = tfMagSifraPreduzeca.getText().trim();
		String magSifraSektora = tfMagSifraSektora.getText().trim();
		String magSifraMagacina = tfMagSifraMagacina.getText().trim();
		String datumKnjizenja = tfDatumKnjizenja.getText().trim();
		String vrstaDokumenta = tfVrstaDokumenta.getText().trim();
		String status = tfStatus.getText().trim();
		try {
			int index = tableModel.editRow(new String[]{poslovnaGodina, sifraPreduzeca, brojPrometnogDok, datumNastankaPrometnogDok, 
					sifraSektora, sifraMagacina, sifraPosPartnera, magSifraPreduzeca, magSifraSektora, magSifraMagacina, datumKnjizenja, 
					vrstaDokumenta, status}, tblGrid.getSelectedRow());
			tblGrid.setRowSelectionInterval(index, index);
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(),"Greska", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	@Override
	public void setMode(int mode){
		super.setMode(mode);
		
		if(mode != StandardForm.MODE_ADD) return;
		
		tfPoslovnaGodina.setText("");
		tfSifraPreduzeca.setText("");
		tfBrojPrometnogDok.setText("");
		tfDatumNastankaPrometnogDok.setText("");
		tfSifraSektora.setText("");
		tfSifraMagacina.setText("");
		tfSifraPosPartnera.setText("");
		tfMagSifraPreduzeca.setText("");
		tfMagSifraSektora.setText("");
		tfMagSifraMagacina.setText("");
		tfDatumKnjizenja.setText("");
		tfVrstaDokumenta.setText("");
		tfStatus.setText("");
	}

	public void proknjiziPrometniDokument() {
		try {
			((PrometniDokumentTableModel)tableModel).proknjiziPrometniDokument(tblGrid.getSelectedRow());
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}
	public void stornirajPrometniDokument() {
		try {
			((PrometniDokumentTableModel)tableModel).stornirajPrometniDokument(tblGrid.getSelectedRow());
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public String[] getSelectedRowKeys() {
		// TODO Auto-generated method stub
		return new String[]{tfPoslovnaGodina.getText().trim(), tfSifraPreduzeca.getText().trim(), tfBrojPrometnogDok.getText().trim(), 
				tfDatumNastankaPrometnogDok.getText().trim()};
	}

	@Override
	public void getZoomedCol(String[] keys, StandardForm form) {
		// TODO Auto-generated method stub
		if(form instanceof PoslovniPartnerForm){
			tfSifraPosPartnera.setText(keys[0]);
		}else if(form instanceof MagacinForm){
			tfSifraPreduzeca.setText(keys[0]);
			tfSifraSektora.setText(keys[1]);
			tfSifraMagacina.setText(keys[2]);
		}else if(form instanceof PoslovnaGodinaForm){
			tfSifraPreduzeca.setText(keys[0]);
			tfPoslovnaGodina.setText(keys[1]);
		}
	}

	@Override
	public String[] getSelectedRowNextKeys(int index) {
		// TODO Auto-generated method stub
		return new String[]{tfSifraPreduzeca.getText().trim(), tfPoslovnaGodina.getText().trim(), tfBrojPrometnogDok.getText().trim(), 
				tfDatumNastankaPrometnogDok.getText().trim(), "", "", "", "", "", ""};
	}

}
